package com.sdy.auth.api;

import com.sdy.auth.api.model.AuthDto;
import com.sdy.auth.api.model.LayTreeItem;
import com.sdy.auth.api.model.MenuDto;
import com.sdy.auth.api.model.UserDto;
import com.sdy.auth.api.model.UserInfo;
import com.sdy.common.model.Response;
import com.sdy.common.model.Result;
import org.springframework.cloud.openfeign.FeignClient;

import java.io.IOException;
import java.util.Collection;
import java.util.List;

/**
 * 权限API
 * @author zhouziqiang
 */
@FeignClient("sdy-auth")
public interface AuthApi {
    /**
     * 校验url权限
     * @param userId 用户id
     * @param path url
     * @param appCode app代码
     * @return 是否有权限 true/false
     */
    Response checkAuthorization(Integer userId, String path, String appCode);

    /**
     * 获取用户有权限的菜单
     * @param userId 用户id
     * @param appCode app代码
     * @return 菜单树
     */
    Response<MenuDto> menu(Integer userId, String appCode);

    /**
     * 获取用户信息
     * @param userId 用户id
     * @return {id,name,loginName} 用户id 用户名 登录名
     */
    Response<UserDto> userInfo(Integer userId);

    /**
     * 登录
     * @param username 用户名
     * @param password 密码
     * @param token 登录token
     * @param ip 用户ip
     * @return 登录结果
     */
    Result<UserInfo> login(String username, Integer deptId, String password, String token, String ip);

    /**
     * 查询用户部门下的所有用户
     * @param userId 用户id
     * @return 查询结果
     */
    Response<Collection> subuser(Integer userId);

    /**
     * 查询用户管理的部门树
     * @param userId 用户id
     * @return 查询结果
     */
    Response<Collection> deptManagerTree(Integer userId);

    /**
     * 第三方登录接口
     * @param username 用户名
     * @param appid app编号
     * @param key app密钥
     * @param timestamp 时间戳(毫秒)
     * @param ip 登录ip
     * @return 登录结果
     */
    Response<Result<UserInfo>> loginS(String username, String appid, String key, String timestamp, String ip);

    /**
     * 查询角色资源树
     * @param roleId 角色id
     * @return 资源树
     */
    Response<LayTreeItem> findAuthTreeByRole(Integer roleId);

    /**
     * 查询默认登录系统
     * @return url地址
     */
    String getDefaultAppUrl(String appCode);

    /**
     * 获取权限列表
     * 可以使用AuthDto中的convertToList方法转为列表，或者convertToMap方法转为Map
     * @param appCode 应用代码，参照application.properties中的参数res.app.code
     * @param userId 用户ID
     * @return 权限树（null-未找到应用）
     */
    AuthDto getAuthTree(String appCode, Integer userId);
}
